package com.rimi.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
// 开启注解,注解为aop
public class LogAop {

	public void beforLog() {
		System.out.println("尝试登录");
	}

	public void afterLog() {
		System.out.println("登录成功");
	}

	public void throwing(Exception e) {
		System.out.println("发生异常" + e);
	}

	
	// 1.开启注解方式过后,以上为指定切入(或者说是非注解)的方法
	// 2.环绕切入传的参数必须是ProceedingJoinPoint
	@Around("execution(* com.rimi.service.impl.UserServiceImpl.login(..))")
	public Object aroundLog(ProceedingJoinPoint pjp) {
		// 方法执行前执行
		System.out.println("尝试登陆");
		Object o = null;
		try {
			// 在这里相当于将pjp作为被切入的方法放到了此方法内,pjp.proceed()表示切入方法被放行,而
			// o=pjp.proceed()得到的值就是被切入方法的返回值,如果不返回的话,外界得不到切入方法的返回值,造成登陆失败
			o = pjp.proceed();
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 方法执行后执行
		System.out.println("登陆成功");
		return o;
	}
}
